/*
  Programa GEFE - Gestión de eventos lúdicos.
  Copyright (C) 2010  Antonio Ramírez Marti

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef ADDACTIVIDADESDIALOG_H
#define ADDACTIVIDADESDIALOG_H

#include <QDialog>
#include <QStandardItemModel>
#include <QDataWidgetMapper>
#include <QSignalMapper>
#include <QModelIndex>
#include <QModelIndexList>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QStringList>
#include <QStringListModel>

#include <modeloactividades.h>

namespace Ui {
    class AddActividadesDialog;
}

class AddActividadesDialog : public QDialog {
    Q_OBJECT
    Q_PROPERTY(int paginaActual READ getPaginaActual WRITE setPaginaActual)

public:
    AddActividadesDialog(QWidget *parent = 0);
    ~AddActividadesDialog();

    /*!
      Devuelve la pagina actual
      @return int, pagina actual
      @note No modifica el objeto
      */

    int getPaginaActual() const;

signals:

    /*!
      Se ha añadido un nuevo tipo de actividad al modelo
      */

    void cambiosTipoActividad();

    /*!
      Se ha añadido un nuevo lugar al modelo
      */

    void cambiosLugares();

    /*!
      Se ha añadido una nueva asociacion al modelo
      */

    void cambiosAsociaciones();

    /*!
      Envia las nuevas actividades
      */

    void sendActividades(QStandardItemModel *actividades);

protected:
    void changeEvent(QEvent *e);

private:
    Ui::AddActividadesDialog *ui;

    QStandardItemModel *modelo;     ///< Modelo de nuevas actividades
    QDataWidgetMapper *mapper;      ///< Mapeador entre el modelo y la interfaz
    QSignalMapper *botonesMapper;   ///< Mapeador de señales para los botones de cambio

    QStringListModel *comboAsoModel;

    /*!
      Prepara el dialogo
      @note Modifica el objeto
      */

    void setup();

    /*!
      Crea los modelos
      @note Modifica el objeto
      */

    void creaModelos();

    /*!
      Conecta los modelos y el mapper
      @note Modifica el objeto
      */

    void conectaModelos();

    /*!
      Conecta la interfaz con los modelos y los slots
      @note Modifica el objeto
      */

    void conectaInterfaz();

    /*!
      Prepara el cambio de página
      */

    void preparaCambioPagina();


private slots:

    /*!
      Cambia de página
      @param avanza  Orden de avanzar o retroceder
        - @b TRUE: Avanza a la siguiente pagina
        - @b FALSE: Retrocede a la pagina anterior
      @note Modifica el estado del objeto
      */

    void cambiaPagina(int avanza);

    /*!
      Establece la pagina actual
      @param pagina Nueva pagina actual
      @note Modifica el estado de algunos objetos
      */

    void setPaginaActual(int pagina);

    /*!
      Carga el modelo de tipos de actividades
      */

    void loadModeloActividades();

    /*!
      Carga el modelo de asociaciones
      */

    void loadModeloAsociaciones();

    /*!
      Carga el modelo de lugares
      */

    void loadModeloLugares();

    /*!
      Añadir una nueva asociacion
      */

    void nuevaAsociacion();

    /*!
      Añadir un nuevo tipo de actividad
      */

    void nuevoTipoActividad();

    /*!
      Añadir un nuevo lugar
      */

    void nuevoLugar();

    /*!
      Crea una nueva actividad dentro del modelo
      @note Modifica el objeto
      */

    void nuevaActividad();

    /*!
      Elimina una o varias actividades del modelo
      @note Modifica el objeto
      */

    void borraActividad();

    /*!
      Guarda las actividades
      */

    void guardarActividades();
};

#endif // ADDACTIVIDADESDIALOG_H
